package main

import (
	"fmt"
	"math/rand"
	"sort"
	"time"
)

func main() {
	m := map[string]int{"foo": 1, "bar": 2}
	println(m)        // 0x1400004c708
	println(m["foo"]) // 1

	n := make(map[string]int, 10)
	n["test"] = 10
	n["test1"] = 100
	fmt.Println(n)         // map[test:10 test1:100]
	fmt.Println(n["test"]) // 10

	// map也支持在声明的时候填充元素
	userInfo := map[string]string{
		"name": "test",
		"pwd":  "test123",
	}
	fmt.Println(userInfo) //  map[name:test pwd:test123]

	// 判断某个值是否存在
	if v, ok := userInfo["name"]; ok {
		fmt.Println(v) // test
	} else {
		fmt.Println("not exist")
	}

	// 遍历
	for k, v := range userInfo {
		fmt.Println(k, v)
	}
	// 只遍历key
	for k := range userInfo {
		fmt.Println(k)
	}

	// delete(userInfo, "name")
	delete(userInfo, "name")
	fmt.Println(userInfo) // map[pwd:test123]

	// 制定顺序
	rand.Seed(time.Now().UnixNano()) // 初始化随机数种子
	var scoreMap = make(map[string]int, 200)

	for i := 0; i < 100; i++ {
		key := fmt.Sprintf("stu%02d", i) // 生成stu开头的字符串
		value := rand.Intn(100)          // 生成0~99的随机整数
		scoreMap[key] = value
	}
	fmt.Println(scoreMap)

	// map的key是无序的，先放入到切片中，然后再排序
	//  ，取出map中的所有key存入切片keys
	var keys = make([]string, 0, 200)
	for key := range scoreMap {
		keys = append(keys, key)
	}
	// 对切片进行排序
	sort.Strings(keys)
	// 按照排序后的key遍历map
	for _, key := range keys {
		fmt.Println(key, scoreMap[key])
	}

	fmt.Println("----元素为map类型的切片------")
	// 元素为map类型的切片
	var mapSlice = make([]map[string]string, 3)
	for index, value := range mapSlice {
		fmt.Printf("index:%d value:%v\n", index, value)
	}
	fmt.Println("after init")
	// 对切片中的map元素进行初始化
	mapSlice[0] = make(map[string]string, 10)
	mapSlice[0]["name"] = "王五"
	mapSlice[0]["password"] = "123456"
	mapSlice[0]["address"] = "红旗大街"
	for index, value := range mapSlice {
		fmt.Printf("index:%d value:%v\n", index, value)
	}
	fmt.Println("----------值为切片类型的map-------------")
	var sliceMap = make(map[string][]string, 3)
	fmt.Println(sliceMap)
	fmt.Println("after init")
	key := "中国"
	value, ok := sliceMap[key]
	if !ok {
		value = make([]string, 0, 2)
	}
	value = append(value, "北京", "上海")
	sliceMap[key] = value
	fmt.Println(sliceMap)
}

//func test1(){
//	s1:=
//}
